package IC.LIR;

import IC.AST.ArrayLocation;
import IC.AST.Assignment;
import IC.AST.Break;
import IC.AST.CallStatement;
import IC.AST.Continue;
import IC.AST.ExpressionBlock;
import IC.AST.Field;
import IC.AST.Formal;
import IC.AST.ICClass;
import IC.AST.If;
import IC.AST.Length;
import IC.AST.LibraryMethod;
import IC.AST.Literal;
import IC.AST.LocalVariable;
import IC.AST.LogicalBinaryOp;
import IC.AST.LogicalUnaryOp;
import IC.AST.MathBinaryOp;
import IC.AST.MathUnaryOp;
import IC.AST.NewArray;
import IC.AST.NewClass;
import IC.AST.PrimitiveType;
import IC.AST.Program;
import IC.AST.Return;
import IC.AST.StatementsBlock;
import IC.AST.StaticCall;
import IC.AST.StaticMethod;
import IC.AST.This;
import IC.AST.UserType;
import IC.AST.VariableLocation;
import IC.AST.VirtualCall;
import IC.AST.VirtualMethod;
import IC.AST.While;

public interface TranslationVisitor {
	
	public LIRTranslation visit(Program program, Integer next);

	public LIRTranslation visit(ICClass icClass, Integer next);

	public LIRTranslation visit(Field field, Integer next);

	public LIRTranslation visit(VirtualMethod method, Integer next);

	public LIRTranslation visit(StaticMethod method, Integer next);

	public LIRTranslation visit(LibraryMethod method, Integer next);

	public LIRTranslation visit(Formal formal, Integer next);

	public LIRTranslation visit(PrimitiveType type, Integer next);

	public LIRTranslation visit(UserType type, Integer next);

	public LIRTranslation visit(Assignment assignment, Integer next);

	public LIRTranslation visit(CallStatement callStatement, Integer next);

	public LIRTranslation visit(Return returnStatement, Integer next);

	public LIRTranslation visit(If ifStatement, Integer next);

	public LIRTranslation visit(While whileStatement, Integer next);

	public LIRTranslation visit(Break breakStatement, Integer next);

	public LIRTranslation visit(Continue continueStatement, Integer next);

	public LIRTranslation visit(StatementsBlock statementsBlock, Integer next);

	public LIRTranslation visit(LocalVariable localVariable, Integer next);

	public LIRTranslation visit(VariableLocation location, Integer next);

	public LIRTranslation visit(ArrayLocation location, Integer next);

	public LIRTranslation visit(StaticCall call, Integer next);

	public LIRTranslation visit(VirtualCall call, Integer next);

	public LIRTranslation visit(This thisExpression, Integer next);

	public LIRTranslation visit(NewClass newClass, Integer next);

	public LIRTranslation visit(NewArray newArray, Integer next);

	public LIRTranslation visit(Length length, Integer next);

	public LIRTranslation visit(MathBinaryOp binaryOp, Integer next);

	public LIRTranslation visit(LogicalBinaryOp binaryOp, Integer next);

	public LIRTranslation visit(MathUnaryOp unaryOp, Integer next);

	public LIRTranslation visit(LogicalUnaryOp unaryOp, Integer next);

	public LIRTranslation visit(Literal literal, Integer next);

	public LIRTranslation visit(ExpressionBlock expressionBlock, Integer next);
}
